# 项目根目录
PROJECT_DIR = .
# 源文件目录
SRC_DIR = $(PROJECT_DIR)/src
# 对象文件目录
OBJ_DIR = $(PROJECT_DIR)/obj
# 构建目录
BUILD_DIR = $(PROJECT_DIR)/build
# 包含头文件目录
INCLUDE_DIR = $(PROJECT_DIR)/include
# 库文件目录
LIB_DIR = $(PROJECT_DIR)/lib
# 可执行文件
SERVER_EXEC = $(BUILD_DIR)/server
CLIENT_EXEC = $(BUILD_DIR)/client
# 源文件列表
SOURCES = $(wildcard $(SRC_DIR)/*.c)
# 对象文件列表
OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES))
# 编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -I$(INCLUDE_DIR) -L$(LIB_DIR)
# 链接选项
LDFLAGS = -lpthread -lmysqlclient

# 默认目标
 all:$(SERVER_EXEC) $(CLIENT_EXEC)

# 生成 server 可执行文件 --- 服务端需要哪些相关的.o文件，就模拟下方的写法 xxx.o 用空格隔开
$(SERVER_EXEC): $(OBJ_DIR)/server.o $(OBJ_DIR)/cJSON.o $(OBJ_DIR)/threadpool.o $(OBJ_DIR)/database.o 
	@mkdir -p $(BUILD_DIR)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 生成 client 可执行文件 --- 客户端需要哪些相关的.o文件，就模拟下方的写法 xxx.o 用空格隔开
$(CLIENT_EXEC): $(OBJ_DIR)/client.o  $(OBJ_DIR)/cJSON.o 
	@mkdir -p $(BUILD_DIR)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 生成对象文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	@mkdir -p $(OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
clean:
	rm -rf $(OBJ_DIR) $(BUILD_DIR)

.PHONY: all clean